=========
Changelog
=========

Данный файл содержит историю всех внесённых изменений в проекте.

v5.8 (20.02.2024)
=================

У проекта появилась документация.
Потому были переписаны все докстроки ядра проекта.
Обновление по большей части касается внутренней части кода.

- Общие улучшения качества кода (по линтеру).
- Сортировка импортов.
- Изменены некоторые названия переменных для большей наглядности.

Utils
-----

- Обновлена типизация функций.
- Добавлены подробные комментарии к коду.
- `check_keys()` помечана как устаревшая и будет вскоре удалена.
- Используется типизация до python 3.10.
- `get_str_timedelta()` Принимает только целые чилса.
- Функция `ensure_list` перемещена в `sp.utils`.

Messages
--------

- Испрпвлена типизация функций.
- Не отображает увдеомления пользователей в статусе, если они они не включены.
- Некоторая правка расписания звонков.
- Пустые уроки не будут отображаться в расписании.

Parser
------

- Переменные для хранения путей к файлам используют Path.
- `_get_day_hash()` стала приватной функцией.
- `_clear_day_lessons()` улучшена производительность.
- Даны более понятные имена некоторые переменным.
- Использование `DefaultDict` для упрощения кода.
- `parse_lessons()` Использование генераторов для оптимизации.
- Возможность передать свои пути к файлам в классе `Schedule`.
- Улучшена типизиация функций. Принимаемые и возвращаемые типы
  стали более подробными.
- Добавлены методы для сборки намерений для текущего расписания.


vk v1.2 (16.01.2023)
====================

Обновление и синхронизация функций из Telegram бота в Вк версию.

- Использование намерений из `sp v5.5`.
- Поправлен текст некоторых кнопок.
- Некоторым кнопка присвоены emoji.
- Немного поправлены комментарии функций.
- Совмещены обработчики просмотра списка изменений в расписании.
- Доабвлена подсказка с доступными классами при выборе класса.
- Подготовка к удалению сторого главного сообещния.
- перенесены тексты сообщений из Telegram бота.
    - Список преиммуществ указанного класса.
    - Функция сборки сообщения списка изменений.
- Добавлен режим просмотра *Ничего* в клавиатуре счётчиках.
- Портирована многостраничная справка по написанию запросов к боту.
    - Клавиатура была упрощена, чтобы показывать только содержание.
    - Текст справки адаптирован под вк бота.
    - Удалены разделы про групповые чаты и поздравление с прохождением.
- Клавиатура счётчиков использует цвета, для большей наглядности.


tg v2.2 (10.01.2024)
====================

Это масштабное обновление Telegram версии бота.
Посвящено оно частичному реешнию проблемы передачи намерений в боте.
Реализация намерений в боте не завершена и будет обновляться.

.. note:: Система намерений

  Полноценная передача и использование намерений в чат-ботах является
  одном из главных ограничений, в отличие от консольной обёртки.

  Система намерений позволяет более точно получать результаты для счётчиков
  и списка изменений.
  Реализации системы намерений в Telegram хоть и не обязательна
  для большинства пользователей, однако она открывает новые возможности
  при получении более точных статистических данных.

TL;DR
-----

- Множество исправлений.
- Добавлен редактор намерений.
- Добавление/изменение/удаление намерений.
- Использование клавиатуры выбора намерений в счётчиках и списке изменений.

Features
--------

- Начат постепенный переход на использование баз данных как хранилище.
- Использование базы данных sqlite3 в `sp_data/tg.db`.
- Удалены `_HOME_BUTTON` и `_TO_HOME_MARKUP`, не используются.
- Добавлены некоторые новые комментарии к коду.
- В `user_middleware` теперь также передаётся экземпляр `UserIntents`.
- Немного изменён стиль логгера (`log_middleware`).
- Немного поправлено главное сообщение бота.
- Исправлена типизация некоторых функций.
- Обновлены тексты коментариев.
- Добавлен раздел **намерения** в дополнительную клавиатуру.
- `get_notify_keyboard()`: Больше не требует экземпляр `SPMessages`.
- `get_updates_keyboard()`: Собирает дополнительную клавиатуру выбора намерений.
- `get_counter_keyboard()`: Собирает дополнительную клавиатуру выбора намерений.
- Вспомогательная функиця `get_intent_status()`.
- Упрощена функция `get_update_timetag()`.
- Немного упрощён текст сообщения статуса.
- `get_notify_message()`: Принимает теперь `enabled` и `hours` вместо экзмпляра `SPMessages`.
- Исправлна таблица в динамическом сообщении счётчиков.
- Использование динамического сообщения списка изменений в обработчике `/updates`.

UserIntents
-----------

Это новый вспомогательный класс, являющийся обёртной над базой данных
для предоставления хранилища пользовательским намерениям.

Класс предосталвяет методы для сохранения, получения, изменения намерений
для конкретного пользователя расписания.

Методы класса:

- `get()`: Получить список намерений пользователя.
- `get_intent(name)`: Получить намерение пользователя по имени.
- `remove_all()`: Удалить все намерения.
- `add(name, i)`: Добавить/обновить намерение.
- `rename(old_name, new_namw)`: Переименовать намерение.
- `remove(name)`: Удалить намерение.

Messages
--------

Новые статические и динамические сообщения в боте.

Статические:

- Информация о намерениях.
- Установка имени намерения.
- Указание параметров намерения.
- Режим удаления намерений.
- Достижение предела количества намерений.

Динамические:

- Сообщение списка изменений.
- Информация о намерении.
- Списка намерений.

Keyboards
---------

Новые функции для динамической сборки клавиатур бота.

- Редактор списка намерений.
- Редактор намерения.
- Клавиатура удаления намерений.

Handlers
--------

- Команды `/cancel` => Сброс машины состояний.
- Команда `/intents`, кнопка `intents` => раздел редактора намерений.
- Команда `/add_intent`, кнопка `intent:add` => Добавить новое намерение.
- Состояние `EditIntentStates.name` => Выбор имени намерения.
- Состояние `EditIntentStates.parse` => Выбор параметров намерения.
- Кнопка `intent:show:{name}` => Режим редактирования намерения.
- Кнопка `intent:remove:{name}` => Удалить намерение пользователя.
- Кнопка `intent:reparse:{name}` => Изменение параметров нвмерения.
- Команда `/remove_intents`, кнопка `intents:remove_mode` => Удаления намерений.
- Кнопка `intent:remove_many:{name}` => Удалить множественно намерение.
- Кнопка `intents:remove_all` => Удалить все намерения.


v5.3.8 -> v5.7 (27.12.2023)
===========================

Как вы возможно уже знаете, в проекет до сих пор как путаница версий
так и не совсем ясный список изменений, который плохо отображает
какие изменений к какой версии компонента относятся.

чтобы решеть эту проблему, тут будет описаны все изменения в парсере,
начиная с версии `5.3.8` и заканчивая последней версией `5.7`.

v5.3.8
------

Улучшено сообщение статуса.

- Изменён стиль сообщения.
- Улучшено отображение времени последнего обновления и проверки.
- Добавлен таймер до следующей проверки расписания.
- Добавлен счётчик количества пользователей по классам.

v5.4
----

- Удалены устаревшие `search_lesson`, `search_cabinet`.
- Сам файл `spm` переименован в `messages`.`
- Использоваие `DefaultDict` для функций счётчиков.

v5.5
----

На замену класса фильтров добавлен новый класс намерений (intents).
В своей основе он использует именованный кортеж, вместе датакласса.
Вме методы для сборки и пересборки намерения находятся в этом же классе.

- Предоставляет методы для сборки: `construct()`, `parse()`.
- Предоставляет методы дополнения: `reconstruct()`, `reparse()`.
- Поддерживает все старые фкнкции фильтров.
- Добавлён счётчик активных пользователей в сообщение статуса.

v5.7
----

Изменён формат хранения списка изменений.
теперь в нем сохраняются время начала и конца временного промежутка,
в котором были зафиксированы изменения в расписании.
Это позволило создать функцию для совмещения нескольких записей об
изменении в одну.

- `SpMessages`: Возможность передать данные пользователя напрямую.
- Попытка исправить получение "пустых" уроков.
- Обновлён формат списка изменений.

- Новый заголовок списка изменений.
  Вместо примерного времени изменения теперь показывает
  временной промежует, внутри которого были зафиксированы изменения.
  Начало временного промежутка обновления.
  Конец временного промежутка обновления.
  Сколько продлился временной промежуток.
  Как давно были зафиксированы прошлые изменений.

- `Intents`: Исправлено получения расписания вне недели.
- Добавлена функция упаковки списка изменений в расписании.
- Пользователю отправляются упакованные изменения в расписании.


tg v2.1 (24.12.2023)
====================

Это дебют локального многостраничего обучения по написанию запросов.
Она поясняет основные концепции написания запросов.
Что такое классы, уроки, кабинеты, как искать что-то в расписании.

- `/typehint` -> `/tutorial` Новоя команда.
- `restrictions` -> `cl_features`.
- Вместо списка ограничений отсутствия класса теперь список преимуществ.
- Объединение главного сообщения и отсутствия класса.
- Новое сообщение при смене класса.
- Новое сообщение с преимуществами указания класса.
- Новое многостраничное обучение запросам.
- Клавиатура для постраничного просмотра обучения.
- `get_home_message()` принимает класс вместо экземпляра.
- Бот удаляет некоторые команды пользователя для чистки чата.


tg v2.0 (13.12.2023)
====================

Смена мажорной версии обусловлена полным изменением кода бота.
Бот был полностью переписан с использованием `aiogram v3.2`,
с учётом всех новых особенностей.
Новый код бота стал более понятным и читаемым.
Общая чистка кода, а также подготовка к разделению бота на несколько файлов.

Telegram v1.14
--------------

Обновления, до того как код был переписан на `aiogram v3.2`.

- Замена фильтров на намерения (Intents).
- Использование переменных окружения вместо JSON файла `telegram.json`.
- Обновлены тексты сообщений.
- Добавлены вспомогательные кнопки при смене класса. (отвязать, ограничения)
- При выборе класса отправляется список доступных классов.
- Добавлено сообщения с подсказками как писать запросы к расписанию.
- Исправлены текстовые ошибки.

Telegram v2.0
-------------

- Обновлено до `sp v5.7`.
- Полностью переписанный и оптимизированный код бота.
- Обновлённые функции получения клавиатур бота.
- Новая дполнительная клавиатура.
- Возможнгсть отключать расслыку в указанынй час.
- Повышено качество кода.
- Переписана обработка `callback_querry`.
- Использование CallbackData factory для обработки кнопок.
- В статусном сообщении указывается время автоматической проверки.
- Добавлена `LogMiddleware` для отладки запросов к боту.
- Больше нет возможности передавать аргументы в команду (будет решено).
- Больше нет возможности использовать бота в групповых чатах (будет решено).


vk v1.1 (10.7.2023, sp v5.3.8)
==============================

Внутренние улучшенияе бота.

Schedule
--------

- Попытка исправить двойное отправление списка изменений при обновлении бота.

Messages
--------

- Поправка в типизации функции `send_search_res()`.
- Возможность отвязать пользователя от класса в методе `set_class()`.

Vk
--

- `process_request`: Всегда возращает строковый результат запроса.
- `process_request`: Напрямую использует метод поиска `Schedule.search()`.
- Исправлены тексты комментариев.
- Используется метод `set_class()` для отвязки класса.
- Объединены оброаботчики для включения и отключения оповещений в указаный час.
- Запросы к расписанию обрабатываются только в личных сообщениях.
- Исправлены тексты сообщений.
- Дополнительный вариант справки при отвязанном классе.
- В справке больше не отображается выбранный пользователм класс.


vk v1.0 (03.7.2023, sp v5.3.6)
==============================

.. note:: Нормализация версий.

  Начиная с этого обновления, версионирование проекта приходит в норму.

Это первая сборка ВК версии бота на основе последней версии  `SPMessage`.
Кодовая база портирована с последней сборки `Telegram v1.13.4`.
Для ВК бота используется фреймворк `vkbottle`.


v5.3 (05.4.2023, tg v1.12)
==========================

Первое появление автоматического скрипта для проверки изменений в рпсписании
и автоматической рассылке расписания пользователям.

Schedule
--------

- Период обновлений сокращён на пол часа.
- Исправлена отправка одинакового списка измений дважды.

Messages
--------

- В параметры пользоватля добалвены настройки уведомлений.
- Новый стиль статуса проекта.

Telegram
--------

Обновление бота `v1.12` до `sp v5.3`.

- Подготовка бота для работы в груповых чатах.
- Добавлена клавиатура для настройки уведмлений.
- `callback_handler()`: Исправлено получени расписания на неделю.
- `callback_handler()`: Обработка исключения `MessageNotModified`.
- `start_command()`: Обработка исключения `MessageCantBeDeleted`.
- Возможность прямо сменить класс в команде `/set_class [класс]`.
- Обновлены описания аргументов в справке для большей ясности.
- Обновлено сообщение со способами смены класса.
- Возможность обрабатывать текстовые команды командой `/sc`.


v5.2 (05.04.2023)
=================

Counters
--------

Полностью новые функии для подсчёта элементов в расписании.
Все функции используют класс фильтров для уточнения результатов подсчётов.

Filters
-------

- Символ "?" используется для автоподстановки вашего класса по умолчанию.

Utils
-----

- Функцуия автоматического дополнения ключей словаря пользователя.
- Используется модуль `ujson` вместо стандартного `josn`.

Telegram
--------

- Обновлен до `sp v5.2`.
- Новая клавиатура для счётчиков.
- `callback_handler()`: Предупреждение в логгировании о неизвестных данных.
- Обновлён текст главноего сообщения.
- Обновлён текст при смене класс, как в дальнейшем можно сменить класс.
- "Инструменты" переименованы в "ещё".
- Добавлено пасхальное сообщение если некорректоно выбран класс.
- Команда `/restrictions` со списком ограничений при отвязанном классе.
- inline кнопка для смены класса теперь использует `SPMessages.reset_user()`.


v5.1 (31.3.2023)
================

Filters
-------

- Используются датаклассы для хранения фильтров.

Messages
--------

- Исправлено отображение номеров уроков в списке изменений.
- Исправлено отображение пустых результатов поиска.
- Исправлено отображения расписания для внеурочного времени.
- Исправлена отправка результатов поиска.
- Исправлено получение расписания на воскресение.

Telegram
--------

- Отправка пушей об исключениях через `gotify`.


v5.0 (27.3.2023, tg v1.8)
=========================

Общее улучшение качества кода.
Смена мажорной версии обусловлена разделением огромного файла `sp.py`
на множество маленьких файлов с классами.
Таких как `parser.py`, `messages.py` и прочее.
Цикл обновлений с целью полной переработкой проекта завершён.

Schedule
--------

- `_uppdate_diff_file()`: теперь использует `collections.deque`.
- Вернулся метод `search()`: для общего поиска данных в расписании.
- Улучшено обращение с пользователями, не указавшими класс.
- Метод `get_updates()` для более гибкого получения списка обновлений
  с использованием фильтров для уточнения результатов.

Messages
--------

- `set_class()` больше не возвращает результат работы.
- Метод `reset_user()` сбрасывает данных пользователя.
- Изменён стиль списка измененений в расписании.
- Совмещены методы `search_lesson()` и `search_cabinet()`.
- `send_day_lessons()`: Сильно изменён формат отображения уроков.
- `send_lessons()`: При изменении расписания отображает сам список изменений.
- Изменён формат отображения уроков.
- Удалён метод `send_users_stats()`.
- `send_today_lessons()`: Снвоа автоматически отправляет расписание на сегодня
  или завтра, в зависимости, закончились ли уроки.

Telegram
--------

- Обновления бота до `v1.8`.
- Совмещены команды `/start` и `/help`.
- Вернулись наименовая для кнопок в справке.
- В главном сообщении отмечается выбранный пользователем класс.
- Добалена возможность отвзять пользователя от класса.
- Изменены тексты сообщений для большей их ясности.
- Исправлено получение расписния по команде `/sp`.
- Удалена команда `/users`.


v4.6 (15.3.2023)
================

Добавлен новый класс `Filter`, который предоставляет набор иснструментов
для более точного получения результатов расписания и будет
использоваться в большинстве функци бота.

- `send_update()`: Вынесена как отдельная функция.
- `send_day_lessons()`: Вынесена как отдельная функция.


Schedule
--------

- Убрана возможность переопределить пути хранения файлов.
- Как обязательный аргумент принимает класс.
- Удалён метод `search()` за ненадобностью.
- Из `SPMeaasges` перенесены `get_class()` и `get_lessons()`.

Messages
--------

- Убрана возможность переопределить пути хранения файлов.
- Больше не требует класс `Schedule` как аргумент.
- `send_users_stats()`: Отправляет статистику о пользователях.
- Малость изменены тексты сообщений.
- `send_lessons()`: Переведён на использлвание `Filters`.
- `send_today_lessons()`: Переведён на использлвание `Filters`.
- `send_today_lessons()`: Переведено на статическое смещение дней.
- `count_lessons()`: Испралвена совместимость со старыми версиями Python.
  - Переведено на использование `Filters`.
  - Изменение стиля сообщения.
- `search_cabinet()`: Переведено на использование `Filters`.
  - Изменение стиля сообщения.

Telegram
--------

- Обновлено до `sp v4.6`.
- Изменены сообщения бота.
- `updates_command()`: Исправлено получение обновлений.
- `users_command()`: Добавлена команда для отправки статистики пользователей.


v4.5 (12.3.2023)
================

- `get_index()`: Оптимизация функции и формата индексов.
- `_update_index_file()`: Немного изменён формат хранения индексов.
- `count_lessons()`: Использование `collections.Counter()`.
- Незначительные правки в аргументах методов


v4.4 (12.3.2023)
================

- `clear_day_lessons()`: Маленькая функция для очистки списка уроков.
- `parse_lessons()`: Была вынесена как отдельная функция.
  - Немного оптимизирован код.
  - Вырезан подсчёт хешей для каждого списка уроков.
- `group_update()`: Была удалена, т.к. не используется.


v4.3 (10.3.2023)
================

Начало цикла обновлений с целью полной переработки парсера.

Schedule
--------

- Полное изменение формата списка изменений.
- Функция `get_day_hash()` для получения хеша списка уроков на день.
- Функция `send_cl_updates()` для отправвки изменений "для класса".
- Атрибут `updates` для получение полного списка изменений расписания.

Messages
--------

- Вместо `send_update_page() -> send_update()`.

Telegram
--------

- Изменён формат `callback_data` для inline клавиатуры.
- Добавлены описания некоторым функциям.
- Временно убрана возможность получение списка изменений для класса.
- В справке примеры были перемещены в начало сообщения.


v4.2 (5.3.2023)
===============

Само обновление вышло намного-намного раньше, но попало сюда только сейчас.
Зато, можно считать его обкатанным и готовым к выпуску.
Переписана большая часть кода.
Оптимизация, новые фишечки, упрощение чтения самого кода!

Смена мажорной версии обусловлена значительными несовместимыми изменениями
в проекте.

Schedule
--------

- Класс стал независимым от пользователей и переимеован в `Schedule`.
- Весь код стал наполнился подсказками типов.
- Вместо `os.path.exists` испльзуется `Pathlib`.
- Для ведения логгирования теперль используется модуль `loguru`.
- Данные проекта теперь будут сохранятся в директорию `sp_data` вместо корня.
- `save_file()`: Добавлено автоматическое создание родительских директорий.
- Полностью изменён формат хранения расписания -> лучше читаемость.
- Изменён формат файла списка изменений.
- Единая функция для получения `l_index, c_index` -> `get_index()`.
- Индексы теперь обновляются вместе с расписанием, а не каждый раз.
- Парсер теперь сам определяет начало нового дня и сколько уроков.
- Обновление расписания перенесено из `get_schedule()` в `_process_update()`.
- `_process_update()`: Добавлен обработчик исключений при неудачной загрузке.
- `_process_update()`: Расписание обновляется теперь точно через 3600 секунд.
- Метод `get_schedule() -> get()`.

Messages
--------

- `send_status()`: Новый стиль сообщения статуса.
- `send_status()`: Добавлено перечисление всех доступных классов.
- Для просмотра изменений используется новые методы
  `get_updates_pages()` и `send_updates_page()`.
- Вновь изменились стили сообщений: `{урок}:{кабинет}`.
- Единая функция для подсчёта уроков/кабинетов `count_lessons()`.
- `count_lessons()`: Отметка кабиентов/уроков, которые используются единожды.
- `search_cabinet()`: Просмотр расписания от имена кабинета.


v3.2 (21.12.2022)
=================

Поправлен метод подсчёта кабинетов в расписании.
Также обёртки были обновлены до последней версии парсера.

Parser
------

- Некоторые методы и атрибуты помечены приватными для логичности.
- Индексы уроков и кабинетов теперь используют декоратор `@property`.

Messages
--------

- Исправлен метод подсчёта кабинетов в расписании.

Chio Plugins
------------

- Добавлена команда для подсчёта кабинетов.


v3.1.1 (12.12.2022)
===================

В парсере изменены обращение с пустыми значениями.


v3.1 (6.12.2022)
================

Небольшой общмй рефакторинг проекта.
Смена мажорной версии обусловлена отделением класса генератора сообщений
от класса расписания.

Features
--------

- Просмотр самых частых кабинетов.
- Поиск по урокам/кабинетам.

Parser
------

- Метод сравнения двух расписаний вынесен в отдельную функцмю.
- Изменены некоторые имена аттрибутов и методов для большей логичности.
- Индекс уроков также стал группироваться по кабинетам.
- Добавлен общий метод для поиска в расписании.

Messages
--------

Методы для сборки сообщений были отделены в сволй класс - `SPMessages`.
Далее этот класс представления может называться как генератор сообщений.


tparser -> sparser (27.11.2022)
===============================

До этого проект именовался как Timetable Pparser.
Теперь же проект называется Schedule parser.

Также обёртка `Console` была переписана с использование модуля `argparse`.


v2.4.1 (23.11.2022)
===================

Это обновление меняет систему отслеживания изменений.
Также привносит некоотрых испрвления и улучшения.
Обёртки обновлены до последней версии парсера.

- Обновлённая система поиска изменений в расписании.
  Вместо того, чтобы каждый раз производить сравнение, новая система
  проводит общее сравнение расписания для всех классаов при загрузке
  расписания. Это значительно увеличивает производительно в
  промежутках загрузки расписания, хоть и замедляет саму загрузку
  и обработку.
- `get_schedule_diff()` - Метод полного сравнения двух расписаний.
- `update_diff_file()` - Запись изменений об обновлениях в файл.
- Изменён способ проверки обновлений расписания пользователя.
- `print_sc_changes()` - Метод отображения изменений в расписании.
- Испрвлено отсутствие оповещний об изменениях в расписании.
- Исправлено получение расписания на сегодня/завтар.


v2.3 (16.11.2022)
=================

.. note:: Путаница в версиях

  Как вы могли заметить, версии распределены не совсем правильно.
  Некоторые изменения слишком большие, чтобы быть минорными.
  Некоторые напротив, слишком маленькие, чтобы быть минорными.
  Однако с этим уже ничего не поделать.

Parser
------

- Изменены имена некоторых атрибутов для большей логичности.
- Имзенения в структуре файла расписания.
- Небольшая оптимизация метода `get_lessons_index()`.
- Упрощён метод подсчёта уроков `count_lessons()`.
- `search_lessons()` Добавлена возможноть сортировки результатов поиска по дням.
- Некоторые изменения в текстах сообщений.

Chio
----

- Совмещены некоторые команды для простоты использования.


v2.2 (15.11.2022)
=================

индекс
  Расписание уроков, где как ключ вместо класса используется название
  урока или кабинета. На данный момент только урока.

Parser
------

- Доабвлено получени **индекса** уроков.
- Новые методы `get_lessons_index()`, `count_lessons()`, `search_lessons()`.
- В сообщение статуса добавлена информация о классах и предметах.

Chio plugin
-----------

- Обновлена до последней версии парсера.
- Исправлено получение расписания *на завтра*.
- Система "пассивных" уведомлений. работающих при обработке событий.


v2.1 (13.11.2022)
=================

Добавлены новые параметры для работы с пользователем.
Первое сообщение со статусом парсера.
Обновление всех обёрток до актуальной версии парсера.
Добавлено предупреждение, если пользователь не указал класс.

- Добавлены новые параметры пользователя.
  - `set_class` - Установлен ли класс у пользователя.
  - `lset_parser` - Время последней проверки расписания пользователем.
- Обновлён метод сравнения хешей дней для повышения скорости работы.
- Новый метод `print_status()` основной информации о состоянии парсера.


v2.0 (13.11.2022)
=================

Смена мажорной версии обусловлено сменой названий переменных.
А также в связи с многочисленными внутренними изменениями.

Parser
------

- Переименован атрибут `schedule -> lessons`.
- Для большей логичности некоторые названия переменных переименованы.
- Пустыне уроки очищаются на стадии загрузки расписания одни раз.
- В файл расписания добавлена отметка последней загрузки расписания.
- Некоторые изменения стиля сообщений.
- Упрощение кода проверки диапазона дней в `print_lessons()`.

Console
-------

- Обновлены описания команд.


v1.6 (7.11.2022)
================

Улучшения работы с расписанием.
Доабвение расписания звонков.
Обновление обёрток до последней версии.

Parser
------

- Добавлена поддержка расписания звонков.
- Переработка методов получение и парсинга расписания.
- Новые методы `get_class()`, `get_lessons()`, `get_schedule_changes()`.
- Некоторые изменения в текстах сообщений методов парсера.
- Исправления в методе пропуска пустых уроков расписания.
- В расписание уроков также добавлено время начала и конца урока.
- Метод `print_today_lessons()` для умного получения уроков на сегодня/завтра.

Chio plugin
-----------

- Исправлено получение расписания для других дней.


v1.4.2 (23.10.2022)
===================

Обновления коснулись метода парсера `print_lessons()`

- Добавлено двухстороннее ограничение диапазона дней (0-6).
- Удалени повторяющихся дней (0, 4, 4, 2 -> 0, 4, 2).
- Сортировка дней по возврастанию.


Chio plugin (21.10.2022)
========================

- Обновлен до `sp v1.4`.


v1.4 (18.10.2022)
=================

Общая чистка кода проекта.
Продолжаем улучшать проект и добавлять в него полезный функционал.

Parser
------

- Изменено поведение увдеомлений об изменениях.
  Теперь они отправляют расписание для дней, где оно изменилось.
- Возможность "отсекать" пустые уроки с конца расписания.

Console
-------

- Возможность получить расписание на всю неделю.


v1.3 (17.10.2022)
=================

- `Parser`: Возможность получения расписания сразу на несколько дней.


v1.2 (16.10.2022)
=================

- Исправлено получение расписания для других классов.


v1.1 (14.10.2022)
=================

Parser
------

- попытка исправить получение расписания на субботу.
- Доабвлен аргумент `update: Optional[bool]=Fasle`, для принудительного
  обновления расписания уроков.

Console
-------

- Доабвен ключ `--parse` для принудительного обновления расписания.


v1.0 (12.10.2022)
=================

Начало развития собственной ветки проекта.

Parser
------

- Отделён код парсера в отдельный файл `sparser.py`.
- Добавлена простая система отслеживания изменений в расписании.
- Добавлены уведомления пользователям об изменениях в расписании.
- Удалён парсер расписания звонков.

Telegram
--------

- Некоторые обновления и исправления кода бота.

Console
-------

- Написана простая обёртка для отладки работы проекта.


v1.0b (10.10.2022)
==================

Начало разработки проекта.
За основу взят исходный код бота Артёма Березина.
Внесены некоторые общие улучшения и исправления.

- Исправлен список зависимостей в коде.
- Чистка и стилизация кода.
- Полностью переписан парсер расписания уроков.
- Испрвлены некоторые ошибки в коде.
- Некоторая правка текстов сообщений.
- Полностью убран так называемый раздел **ВПР**.
- Добавлена возможность кэширования данных в json файл.
